describe('用户管理功能测试', () => {
  beforeEach(() => {
    // 清除之前的localStorage
    cy.clearLocalStorage()
    
    // 访问登录页面并登录
    cy.visit('/admin/login')
    cy.get('.login-container').should('be.visible')
    cy.get('input[placeholder="用户名"]').should('be.visible').type('admin')
    cy.get('input[placeholder="密码"]').should('be.visible').type('111111')
    cy.get('button').contains('登录').should('be.visible').click()
    
    // 等待登录成功并跳转
    cy.url().should('include', '/admin')
    
    // 访问用户管理页面
    cy.visit('/admin/user-manage')

    // 等待页面加载完成
    cy.wait(2000)
    
    // 确保表格和数据都已加载
    cy.get('.el-table').should('exist')
    cy.get('.el-table__row').should('exist')
  })

  it('流程2：新增用户-错误格式测试', () => {
    cy.get('button').contains('新增用户').should('be.visible').click()
    cy.get('.el-dialog').should('be.visible')
    
    // 输入错误格式数据
    cy.get('.el-dialog input[placeholder="请输入用户名"]').should('be.visible').type('a') // 用户名太短
    cy.get('.el-dialog input[placeholder="请输入密码"]').should('be.visible').type('123') // 密码太短
    cy.get('.el-dialog input[placeholder="请再次输入密码"]').should('be.visible').type('456') // 密码不匹配
    cy.get('.el-dialog').contains('确定').should('be.visible').click()
    
    // 验证错误提示
    cy.get('.el-form-item__error').should('be.visible')
  })

  it('流程3：新增用户-正确格式测试', () => {
    // 生成随机两位数字
    const randomNum = Math.floor(Math.random() * 90 + 10) // 生成10-99之间的随机数
    const newUsername = `test${randomNum}`

    cy.get('button').contains('新增用户').should('be.visible').click()
    cy.get('.el-dialog').should('be.visible')
    
    // 输入正确格式数据
    cy.get('.el-dialog input[placeholder="请输入用户名"]').should('be.visible').type(newUsername)
    cy.get('.el-dialog input[placeholder="请输入密码"]').should('be.visible').type('111111')
    cy.get('.el-dialog input[placeholder="请再次输入密码"]').should('be.visible').type('111111')
    cy.get('.el-dialog').contains('确定').should('be.visible').click()
  })

  it('流程4：编辑用户测试', () => {
    // 生成随机两位数字
    const randomNum = Math.floor(Math.random() * 90 + 10) // 生成10-99之间的随机数
    const newUsername = `test${randomNum}`

    // 等待并获取第一行的用户名
    cy.get('.el-table__row').first()
      .find('td').eq(1) // 用户名是第二列
      .invoke('text')
      .then((username) => {
        cy.log(`当前用户名: ${username}`)
        
        // 点击第一行的编辑按钮（蓝色笔形图标）
        cy.get('.el-table__row').first()
          .find('.el-button--primary')
          .should('be.visible')
          .click()
        
        // 等待对话框显示
        cy.get('.el-dialog').should('be.visible')
        
        // 修改用户名和密码
        cy.get('.el-dialog .el-form-item').first().find('input')
          .should('be.visible')
          .should('have.value', username.trim()) // 验证原有用户名
          .clear()
          .type(newUsername)

        // 通过label查找密码输入框
        cy.get('.el-dialog .el-form-item')
          .contains('label', '新密码')
          .parent()
          .find('input')
          .should('be.visible')
          .clear()
          .type('111111')

        // 点击确定按钮
        cy.get('.el-dialog').contains('button', '确定')
          .should('be.visible')
          .click()

        // 验证修改成功
        cy.get('.el-table__row').first()
          .find('td').eq(1)
          .should('contain', newUsername)
      })
  })

  it('流程5：冻结/解冻测试', () => {
    // 点击第一行的冻结/解冻按钮
    cy.get('.el-table__row').first()
      .find('.el-button--warning')
      .click()
    
    cy.get('.el-message-box').should('be.visible')
    cy.get('.el-message-box').contains('确定').should('be.visible').click()
    
    // 等待状态更新后再次点击同一个位置的按钮
    cy.wait(1000)
    cy.get('.el-table__row').first()
      .find('.el-button').eq(1) // 使用索引定位，因为是同一个位置的按钮
      .click()
    
    cy.get('.el-message-box').should('be.visible')
    cy.get('.el-message-box').contains('确定').should('be.visible').click()
  })

  it('流程6：删除用户测试', () => {
    // 点击第一行的删除按钮（红色垃圾桶图标）
    cy.get('.el-table__row').first()
      .find('.el-button--danger')
      .click()
    
    cy.get('.el-message-box').should('be.visible')
    cy.get('.el-message-box').contains('确定').should('be.visible').click()
  })
}) 